{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "第二步：调整树的参数：max_depth & min_child_weight# 第二步：调整树的参数：max_depth & min_child_weight"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 49352 entries, 0 to 49351\n",
      "Columns: 228 entries, bathrooms to interest_level\n",
      "dtypes: float64(9), int64(219)\n",
      "memory usage: 85.8 MB\n"
     ]
    }
   ],
   "source": [
    "dpath = './data/'\n",
    "dtrain = pd.read_csv(dpath +\"RentListingInquries_FE_train.csv\")\n",
    "dtrain.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y_train = dtrain['interest_level']\n",
    "train = dtrain.drop([\"interest_level\"], axis=1)\n",
    "X_train = np.array(train)\n",
    "\n",
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "第一轮参数调整得到的n_estimators最优值（216），其余参数继续默认值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'max_depth': [6, 7, 8], 'min_child_weight': [4, 5, 6]}\n"
     ]
    }
   ],
   "source": [
    "# max_depth 建议3-10， min_child_weight=1／sqrt(ratio_rare_event) =5.5\n",
    "max_depth = [6,7,8]\n",
    "min_child_weight = [4,5,6]\n",
    "param_test2_1 = dict(max_depth=max_depth, min_child_weight=min_child_weight)\n",
    "print(param_test2_1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.58836, std: 0.00268, params: {'max_depth': 6, 'min_child_weight': 4},\n",
       "  mean: -0.58862, std: 0.00278, params: {'max_depth': 6, 'min_child_weight': 5},\n",
       "  mean: -0.58868, std: 0.00368, params: {'max_depth': 6, 'min_child_weight': 6},\n",
       "  mean: -0.58905, std: 0.00453, params: {'max_depth': 7, 'min_child_weight': 4},\n",
       "  mean: -0.58864, std: 0.00364, params: {'max_depth': 7, 'min_child_weight': 5},\n",
       "  mean: -0.58980, std: 0.00372, params: {'max_depth': 7, 'min_child_weight': 6},\n",
       "  mean: -0.59364, std: 0.00471, params: {'max_depth': 8, 'min_child_weight': 4},\n",
       "  mean: -0.59220, std: 0.00391, params: {'max_depth': 8, 'min_child_weight': 5},\n",
       "  mean: -0.59173, std: 0.00447, params: {'max_depth': 8, 'min_child_weight': 6}],\n",
       " {'max_depth': 6, 'min_child_weight': 4},\n",
       " -0.5883604600543554)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb2_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=216,  #第一轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3,\n",
    "        nthread=-1)\n",
    "gsearch2_1 = GridSearchCV(xgb2_1, param_grid = param_test2_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold, return_train_score=True)\n",
    "gsearch2_1.fit(X_train , y_train)\n",
    "\n",
    "gsearch2_1.grid_scores_, gsearch2_1.best_params_,     gsearch2_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([272.44499903, 276.74938254, 278.000278  , 311.39149675,\n",
       "        314.68082342, 311.19557247, 346.62015557, 347.73714757,\n",
       "        271.35809417]),\n",
       " 'mean_score_time': array([0.87081623, 0.85380387, 0.87562032, 1.22246456, 1.15301609,\n",
       "        1.21245694, 1.5877912 , 1.52047482, 0.93086095]),\n",
       " 'mean_test_score': array([-0.58836046, -0.58862274, -0.58868231, -0.58904681, -0.58864294,\n",
       "        -0.58979538, -0.59364476, -0.59220105, -0.59172872]),\n",
       " 'mean_train_score': array([-0.48386553, -0.48694361, -0.4899766 , -0.44088065, -0.44638346,\n",
       "        -0.4508742 , -0.39787189, -0.40602058, -0.41350476]),\n",
       " 'param_max_depth': masked_array(data=[6, 6, 6, 7, 7, 7, 8, 8, 8],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_min_child_weight': masked_array(data=[4, 5, 6, 4, 5, 6, 4, 5, 6],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'max_depth': 6, 'min_child_weight': 4},\n",
       "  {'max_depth': 6, 'min_child_weight': 5},\n",
       "  {'max_depth': 6, 'min_child_weight': 6},\n",
       "  {'max_depth': 7, 'min_child_weight': 4},\n",
       "  {'max_depth': 7, 'min_child_weight': 5},\n",
       "  {'max_depth': 7, 'min_child_weight': 6},\n",
       "  {'max_depth': 8, 'min_child_weight': 4},\n",
       "  {'max_depth': 8, 'min_child_weight': 5},\n",
       "  {'max_depth': 8, 'min_child_weight': 6}],\n",
       " 'rank_test_score': array([1, 2, 4, 5, 3, 6, 9, 8, 7]),\n",
       " 'split0_test_score': array([-0.5841337 , -0.58395431, -0.58223644, -0.58227296, -0.58290501,\n",
       "        -0.58304224, -0.5859362 , -0.58511792, -0.58386809]),\n",
       " 'split0_train_score': array([-0.48513628, -0.48831189, -0.49134928, -0.44198659, -0.44874445,\n",
       "        -0.45352156, -0.39833123, -0.40574926, -0.41386682]),\n",
       " 'split1_test_score': array([-0.58704053, -0.58839619, -0.58810012, -0.58883724, -0.58686678,\n",
       "        -0.58953597, -0.59049227, -0.59079538, -0.58983339]),\n",
       " 'split1_train_score': array([-0.48294545, -0.48680569, -0.49030028, -0.43957818, -0.44544856,\n",
       "        -0.45091164, -0.40057132, -0.40690527, -0.41427033]),\n",
       " 'split2_test_score': array([-0.5890714 , -0.58931822, -0.59016727, -0.58914179, -0.5894791 ,\n",
       "        -0.59155745, -0.59600201, -0.59551242, -0.59415901]),\n",
       " 'split2_train_score': array([-0.48295467, -0.48604359, -0.49107639, -0.43915532, -0.44510423,\n",
       "        -0.44974009, -0.39854901, -0.40770302, -0.4124972 ]),\n",
       " 'split3_test_score': array([-0.58932773, -0.58879385, -0.58941417, -0.58842635, -0.590096  ,\n",
       "        -0.59062142, -0.5979871 , -0.59491457, -0.59445528]),\n",
       " 'split3_train_score': array([-0.48451636, -0.48620919, -0.4882252 , -0.44053322, -0.44528738,\n",
       "        -0.44958493, -0.39572547, -0.40586543, -0.41449139]),\n",
       " 'split4_test_score': array([-0.59223011, -0.59265234, -0.59349503, -0.59655801, -0.59386939,\n",
       "        -0.59422114, -0.59780748, -0.5946657 , -0.5963292 ]),\n",
       " 'split4_train_score': array([-0.48377489, -0.48734767, -0.48893184, -0.44314994, -0.44733266,\n",
       "        -0.45061279, -0.39618242, -0.40387995, -0.41239805]),\n",
       " 'std_fit_time': array([2.65637046, 2.22857464, 3.12012052, 2.34343304, 2.64208009,\n",
       "        2.92831845, 3.64573077, 4.34032172, 4.83182165]),\n",
       " 'std_score_time': array([0.01407311, 0.04393734, 0.02036208, 0.13518186, 0.07964477,\n",
       "        0.09562191, 0.20003989, 0.2944012 , 0.09906093]),\n",
       " 'std_test_score': array([0.00268405, 0.00277826, 0.00368207, 0.00453277, 0.0036387 ,\n",
       "        0.00371605, 0.00471386, 0.00391286, 0.00446959]),\n",
       " 'std_train_score': array([0.00086288, 0.00082509, 0.00121305, 0.00149444, 0.00142738,\n",
       "        0.0014161 , 0.00175601, 0.00128789, 0.00088663])}"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch2_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.588360 using {'max_depth': 6, 'min_child_weight': 4}\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x15f01bd3390>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch2_1.best_score_, gsearch2_1.best_params_))\n",
    "test_means = gsearch2_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch2_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch2_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch2_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch2_1.cv_results_).to_csv('my_preds_maxdepth_min_child_weights.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(min_child_weight), len(max_depth))\n",
    "train_scores = np.array(train_means).reshape(len(min_child_weight), len(max_depth))\n",
    "\n",
    "for i, value in enumerate(min_child_weight):\n",
    "    pyplot.plot(max_depth, test_scores[i], label= 'test_min_child_weight:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'max_depth' )                                                                                                      \n",
    "pyplot.ylabel( '- Log Loss' )\n",
    "pyplot.savefig( 'max_depth_vs_min_child_weght.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "结果跟预制的相同，所以不需要对若分类器数调整"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
